package Modelo;


public class Teletransportacion implements Habilidad {
	private int pasos;
	
	public Teletransportacion(){
		pasos=Constantes.teletransportacionPasosInicio;
	}
	
	/**
	 * El ejecutor usa la teletransportacion
	 * @param ejecutor
	 */
	
	public void ejecutarSobre(PoseedorDeHabilidad ejecutor) {
		if (pasos== 1){
			try{
				Bloque bloqueAnterior=ejecutor.getMapa().getBloqueDondeEsta(ejecutor);
				Bloque bloqueFinal= ejecutor.getMapa().getBloqueNEnDireccionDesdeUbicacionDe(ejecutor, Constantes.teletransportacionPasosFinal, ejecutor.getSentido());
				bloqueAnterior.desalojar(ejecutor);
				if(bloqueFinal.esFirme())
					ejecutor.morir();
				bloqueFinal.alojar(ejecutor);
				pasos--; // por si las dudas
				ejecutor.eliminarHabilidad(this);
			}
			catch(FueraDelMapaException e){
				ejecutor.getMapa().getBloqueDondeEsta(ejecutor).desalojar(ejecutor);
				ejecutor.morir();	// se teletransporto fuera del planeta y murio
			}
		}else{
			pasos--;
		}

	}

	/**
	 * Indica si el ejecutor puede usar la teletransportacion
	 * @param ejecutor
	 * @return boolean
	 */
	
	public boolean esEjecutableSobre(PoseedorDeHabilidad ejecutor) {
		if(ejecutor.getSentidoVertical()!=Constantes.reposo)
			return false;
		if(pasos>1){
			if(ejecutor.getSentidoVertical()==Constantes.reposo)
				pasos--;
			
		//	System.out.println("faltan " + pasos + " pasos");
			
			return false;
		}
		return true;
	}

	/**
	 * Tiempo que tarda la habilidad en ejecutarse
	 * @param ejecutor
	 * @return long
	 */
	
	public long tiempoDeEjecucion(PoseedorDeHabilidad ejecutor) {
		return 0;
	}

	@Override
	public boolean seEjecuto() {
		// TODO Auto-generated method stub
		return false;
	}

}

